using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Text;
using System.Windows.Forms;
using System.IO;
using CTEM.Controllers.Global;

using CTEM.Models;
using CTEM.Controllers.Global;

namespace CTEM.Controllers.DAO
{
    class FinalAccountDAO
    {
        public FinalAccountDAO()
        {
            Transaction = null;
        }

        public SqlTransaction Transaction { get; set; }
        private SqlConnection _con;

        SqlConnection Connection
        {
            get
            {
                if (_con == null)
                    _con = new SqlConnection(DatabaseInfo.ConnectionString);
                if (_con.State == ConnectionState.Closed)
                {
                    _con.Open();
                }
                return _con;
            }
            set
            {
                _con = value;
            }
        }       

        public bool CreateFinalAccount(CT_PurchaseBookDTO finalAccount)
        {
            using (var cmd = new SqlCommand("[dbo].[FinalAccount_Create]", Connection) { CommandType = CommandType.StoredProcedure })
            {
                if (Transaction != null)
                {
                    cmd.Transaction = Transaction;
                }
                try
                {
                    cmd.Parameters.Add(new SqlParameter("@DebtID", finalAccount.DebtID));
                    cmd.Parameters.Add(new SqlParameter("@DateAccount", finalAccount.DatePurchase));
                    cmd.Parameters.Add(new SqlParameter("@PersonAccount", finalAccount.Officer));
                    cmd.Parameters.Add(new SqlParameter("@VehicleID", finalAccount.VehicleID));
                    cmd.Parameters.Add(new SqlParameter("@ConstructionID", finalAccount.ConstructionID));
                    cmd.Parameters.Add(new SqlParameter("@WarehouseID", finalAccount.WarehouseID));
                    cmd.Parameters.Add(new SqlParameter("@Contents", finalAccount.Contents));
                    cmd.Parameters.Add(new SqlParameter("@MaterialID", finalAccount.MaterialID));
                    cmd.Parameters.Add(new SqlParameter("@GroupMaterialID", finalAccount.GroupMaterialID));
                    cmd.Parameters.Add(new SqlParameter("@Quantity", finalAccount.Quantity));
                    cmd.Parameters.Add(new SqlParameter("@Price", finalAccount.Price));
                    cmd.Parameters.Add(new SqlParameter("@TotalCost", finalAccount.TotalCost));
                    cmd.Parameters.Add(new SqlParameter("@IsPay", finalAccount.IsPay));
                    cmd.Parameters.Add(new SqlParameter("@Note", finalAccount.Note));
                    cmd.Parameters.Add(new SqlParameter("@CreatedBy", Global.Global.CurrentUser.Username));
                    cmd.ExecuteNonQuery();
                    return true;
                }
                catch (SqlException sql)
                {
                    //string msn = Global.Global.LogMessage(Global.Global.CurrentStackFrame.GetMethod().ToString(), Global.Global.CurrentStackFrame.GetFileLineNumber(), sql.Message);
                    //Logger.WriteLog(LogLevel.ERROR, msn);
                    return false;
                }
                finally
                {
                    if (Transaction == null)
                        Connection.Close();
                }
            }
        }

        //public List<FinalAccountDTO> GetFinalAccount(long warehouseid, string debtName, DateTime fromdate, DateTime todate, int ispay, long compareid)
        //{
        //    var cmd = new SqlCommand("[dbo].[FinalAccount_GetFinalAccount]", Connection);
        //    if (Transaction != null)
        //    {
        //        cmd.Transaction = Transaction;
        //    }
        //    try
        //    {
        //        cmd.Parameters.Add(warehouseid == 0
        //                               ? new SqlParameter("@WarehouseID", DBNull.Value)
        //                               : new SqlParameter("@WarehouseID", warehouseid));
        //        cmd.Parameters.Add(new SqlParameter("@DebtName", debtName));
        //        cmd.Parameters.Add(new SqlParameter("@FromDate", fromdate));
        //        cmd.Parameters.Add(new SqlParameter("@ToDate", todate.AddDays(1)));
        //        cmd.Parameters.Add(ispay == -1
        //                               ? new SqlParameter("@IsPay", DBNull.Value)
        //                               : new SqlParameter("@IsPay", ispay));
        //        cmd.Parameters.Add(compareid == -1
        //                               ? new SqlParameter("@CompareID", DBNull.Value)
        //                               : new SqlParameter("@CompareID", compareid));
        //        cmd.CommandType = CommandType.StoredProcedure;
        //        SqlDataReader reader = cmd.ExecuteReader();
        //        var listFinalAccount = new List<FinalAccountDTO>();
        //        while (reader.Read())
        //        {
        //            var finalAccount = new FinalAccountDTO
        //            {
        //                FinalAccountID = Convert.ToString(reader["FinalAccountID"]),                        
        //                ConstructionID = Convert.ToInt64(reader["ConstructionID"]),
        //                DateAccount = DateTime.Parse(Convert.ToString(reader["DateAccount"])),
        //                DebtID = Convert.ToInt64(reader["DebtID"]),                        
        //                TotalCost = Convert.ToInt64(reader["TotalCost"]),
        //                PersonAccount = Convert.ToString(reader["PersonAccount"]),
        //                ComparationDebtID = reader["ComparationDebtID"] != DBNull.Value ? Convert.ToInt64(reader["ComparationDebtID"]) : 0,
        //                WarehouseID = reader["WarehouseID"] != DBNull.Value ? Convert.ToInt64(reader["WarehouseID"]) : 0,
        //                Note = Convert.ToString(reader["Note"]),
        //                CreatedDate = DateTime.Parse(Convert.ToString(reader["CreatedDate"])),
        //                LastUpdated = DateTime.Parse(Convert.ToString(reader["LastUpdate"])),
        //                CreatedBy = Convert.ToString(reader["CreatedBy"]),
        //                UpdatedBy = Convert.ToString(reader["UpdatedBy"])
        //            };
        //            try
        //            {
        //                var Ispay = Convert.ToBoolean(reader["IsPay"]);
        //                finalAccount.IsPay = Ispay ? 1 : 0;
        //                finalAccount.ComparationDebtID = Convert.ToInt64(reader["ComparationDebtID"]);
        //                finalAccount.WarehouseID = Convert.ToInt64(reader["WarehouseID"]);
        //            }
        //            catch (Exception)
        //            {
        //            }
        //            listFinalAccount.Add(finalAccount);
        //        }
        //        return listFinalAccount;
        //    }
        //    catch (SqlException sql)
        //    {
        //        MessageBox.Show(sql.Message, "Error SQL", MessageBoxButtons.OK, MessageBoxIcon.Error);
        //        return null;
        //    }
        //    finally
        //    {
        //        if (Transaction == null) Connection.Close();
        //    }
        //}

        //public List<FinalAccountDTO> GetFinalAccountById(string id)
        //{
        //    var cmd = new SqlCommand("[dbo].[FinalAccount_GetFinalAccountById]", Connection);
        //    if (Transaction != null)
        //    {
        //        cmd.Transaction = Transaction;
        //    }
        //    try
        //    {
        //        cmd.Parameters.Add(new SqlParameter("@id", id));                
        //        cmd.CommandType = CommandType.StoredProcedure;
        //        SqlDataReader reader = cmd.ExecuteReader();
        //        var listFinalAccount = new List<FinalAccountDTO>();
        //        while (reader.Read())
        //        {
        //            var finalAccount = new FinalAccountDTO
        //            {
        //                FinalAccountID = Convert.ToString(reader["FinalAccountID"]),
        //                ConstructionID = Convert.ToInt64(reader["ConstructionID"]),
        //                ConstructionName = Convert.ToString(reader["ConstructionName"]),
        //                DateAccount = DateTime.Parse(Convert.ToString(reader["DateAccount"])),
        //                DebtID = Convert.ToInt64(reader["DebtID"]),
        //                DebtName = Convert.ToString(reader["DebtName"]),
        //                TransportationCost = Convert.ToInt64(reader["TransportationCost"]),
        //                TotalCost = Convert.ToInt64(reader["TotalCost"]),
        //                PersonAccount = Convert.ToString(reader["PersonAccount"]),
        //                ComparationDebtID = reader["ComparationDebtID"] != DBNull.Value ? Convert.ToInt64(reader["ComparationDebtID"]) : 0,
        //                WarehouseID = reader["WarehouseID"] != DBNull.Value ? Convert.ToInt64(reader["WarehouseID"]) : 0,
        //                Note = Convert.ToString(reader["Note"]),
        //                CreatedDate = DateTime.Parse(Convert.ToString(reader["CreatedDate"])),
        //                LastUpdated = DateTime.Parse(Convert.ToString(reader["LastUpdate"])),
        //                CreatedBy = Convert.ToString(reader["CreatedBy"]),
        //                UpdatedBy = Convert.ToString(reader["UpdatedBy"])
        //            };
        //            try
        //            {
        //                finalAccount.DateAccountFormated =
        //                    finalAccount.DateAccount.ToString(Constants.DATETIME_FORMAT_SHORTDATE);
        //                finalAccount.TransportationCostFormated =
        //                    Global.Global.ConvertLongToMoney(finalAccount.TransportationCost, Constants.SPLIP_MONEY);
        //                finalAccount.TotalCostFormated = Global.Global.ConvertLongToMoney(finalAccount.TotalCost, Constants.SPLIP_MONEY);
        //                var Ispay = Convert.ToBoolean(reader["IsPay"]);
        //                finalAccount.IsPay = Ispay ? 1 : 0;
        //                finalAccount.ComparationDebtID = Convert.ToInt64(reader["ComparationDebtID"]);
        //                finalAccount.WarehouseID = Convert.ToInt64(reader["WarehouseID"]);
        //            }
        //            catch (Exception)
        //            {
        //            }
        //            listFinalAccount.Add(finalAccount);
        //        }
        //        return listFinalAccount;
        //    }
        //    catch (SqlException sql)
        //    {
        //        MessageBox.Show(sql.Message, "Error SQL", MessageBoxButtons.OK, MessageBoxIcon.Error);
        //        return null;
        //    }
        //    finally
        //    {
        //        if (Transaction == null) Connection.Close();
        //    }
        //}

        //public bool DeleteFinalAccount(long id)
        //{
        //    var cmd = new SqlCommand("[dbo].[FinalAccount_Delete]", Connection) { CommandType = CommandType.StoredProcedure };
        //    if (Transaction != null)
        //    {
        //        cmd.Transaction = Transaction;
        //    }
        //    try
        //    {
        //        cmd.Parameters.Add(new SqlParameter("@FinalAccountID", id));
        //        cmd.ExecuteNonQuery();
        //        return true;
        //    }
        //    catch (SqlException sql)
        //    {
        //        return false;
        //    }
        //    finally
        //    {
        //        if (Transaction == null)
        //            Connection.Close();
        //    }
        //}

        //public bool DeleteAll()
        //{
        //    var cmd = new SqlCommand("[dbo].[FinalAccount_DeleteAll]", Connection) { CommandType = CommandType.StoredProcedure };
        //    if (Transaction != null)
        //    {
        //        cmd.Transaction = Transaction;
        //    }
        //    try
        //    {
        //        cmd.ExecuteNonQuery();
        //        return true;
        //    }
        //    catch (SqlException sql)
        //    {
        //        return false;
        //    }
        //    finally
        //    {
        //        if (Transaction == null)
        //            Connection.Close();
        //    }
        //}

        //public bool UpdateFinalAccount(FinalAccountDTO finalAccount)
        //{
        //    var cmd = new SqlCommand("[dbo].[FinalAccount_Update]", Connection) { CommandType = CommandType.StoredProcedure };
        //    if (Transaction != null)
        //    {
        //        cmd.Transaction = Transaction;
        //    }
        //    try
        //    {
        //        cmd.Parameters.Add(new SqlParameter("@FinalAccountID", finalAccount.FinalAccountID));                
        //        cmd.Parameters.Add(new SqlParameter("@ConstructionID", finalAccount.ConstructionID));
        //        cmd.Parameters.Add(new SqlParameter("@DateAccount", finalAccount.DateAccount));
        //        cmd.Parameters.Add(new SqlParameter("@DebtID", finalAccount.DebtID));
        //        cmd.Parameters.Add(new SqlParameter("@TransportationCost", finalAccount.TransportationCost));
        //        cmd.Parameters.Add(new SqlParameter("@TotalCost", finalAccount.TotalCost));
        //        cmd.Parameters.Add(new SqlParameter("@PersonAccount", finalAccount.PersonAccount));
        //        cmd.Parameters.Add(new SqlParameter("@ComparationDebtID", finalAccount.ComparationDebtID));
        //        cmd.Parameters.Add(new SqlParameter("@IsPay", finalAccount.IsPay));
        //        cmd.Parameters.Add(new SqlParameter("@Note", finalAccount.Note));
        //        cmd.Parameters.Add(new SqlParameter("@CreatedBy", Global.Global.CurrentUser.Username));
        //        cmd.ExecuteNonQuery();
        //        return true;
        //    }
        //    catch (SqlException sql)
        //    {
        //        return false;
        //    }
        //    finally
        //    {
        //        if (Transaction == null)
        //            Connection.Close();
        //    }
        //}

        //public FinalAccountDetailDTO FindAccountItem(string accId, long materialId)
        //{
        //    var cmd = new SqlCommand("[dbo].[FinalAccount_GetFinalAccountItem]", Connection);
        //    if (Transaction != null)
        //    {
        //        cmd.Transaction = Transaction;
        //    }
        //    try
        //    {
        //        cmd.Parameters.Add(new SqlParameter("@accId", accId));
        //        cmd.Parameters.Add(new SqlParameter("@materialId", materialId));
        //        cmd.CommandType = CommandType.StoredProcedure;
        //        SqlDataReader reader = cmd.ExecuteReader();
        //        if (reader.Read())
        //        {
        //            var finalAccount = new FinalAccountDetailDTO
        //            {
        //                FinalAccountDetailID = Convert.ToInt64(reader["FinalAccountDetailID"]),
        //                FinalAccountID = Convert.ToString(reader["FinalAccountID"]),
        //                MaterialID = Convert.ToInt64(reader["MaterialID"]),                        
        //                Note = Convert.ToString(reader["Note"]),
        //                Quantity = Convert.ToDouble(reader["Quantity"]),                        
        //                TotalCost = Convert.ToInt64(reader["TotalCost"]),
        //                UnitCost = Convert.ToInt64(reader["UnitCost"])
        //            };
        //            return finalAccount;
        //        }
        //        return null;
        //    }
        //    catch (SqlException sql)
        //    {
        //        MessageBox.Show(sql.Message, "Error SQL", MessageBoxButtons.OK, MessageBoxIcon.Error);
        //        return null;
        //    }
        //    finally
        //    {
        //        if (Transaction == null) Connection.Close();
        //    }
        //}

        //public bool UpdateFinalAccountDetail(FinalAccountDetailDTO item)
        //{
        //    var cmd = new SqlCommand("[dbo].[FinalAccount_UpdateDetail]", Connection) { CommandType = CommandType.StoredProcedure };
        //    if (Transaction != null)
        //    {
        //        cmd.Transaction = Transaction;
        //    }
        //    try
        //    {
        //        cmd.Parameters.Add(new SqlParameter("@FinalAccountDetailID", item.FinalAccountDetailID));
        //        cmd.Parameters.Add(new SqlParameter("@FinalAccountID", item.FinalAccountID));
        //        cmd.Parameters.Add(new SqlParameter("@MaterialID", item.MaterialID));
        //        cmd.Parameters.Add(new SqlParameter("@Quantity", item.Quantity));
        //        cmd.Parameters.Add(new SqlParameter("@UnitCost", item.UnitCost));
        //        cmd.Parameters.Add(new SqlParameter("@TotalCost", item.TotalCost));
        //        cmd.Parameters.Add(new SqlParameter("@Note", item.Note));
        //        cmd.ExecuteNonQuery();
        //        return true;
        //    }
        //    catch (SqlException sql)
        //    {
        //        return false;
        //    }
        //    finally
        //    {
        //        if (Transaction == null)
        //            Connection.Close();
        //    }
        //}

        //public List<FinalAccountDetailDTO> GetFinalAccountDetail(string id)
        //{
        //    var cmd = new SqlCommand("[dbo].[FinalAccount_GetFinalAccountDetial]", Connection);
        //    if (Transaction != null)
        //    {
        //        cmd.Transaction = Transaction;
        //    }
        //    try
        //    {
        //        cmd.Parameters.Add(new SqlParameter("@FinalAccountID", id));
        //        cmd.CommandType = CommandType.StoredProcedure;
        //        SqlDataReader reader = cmd.ExecuteReader();
        //        var listitem = new List<FinalAccountDetailDTO>();
        //        while (reader.Read())
        //        {
        //            var finalAccount = new FinalAccountDetailDTO
        //            {
        //                FinalAccountDetailID = Convert.ToInt64(reader["FinalAccountDetailID"]),
        //                FinalAccountID = Convert.ToString(reader["FinalAccountID"]),
        //                MaterialID = Convert.ToInt64(reader["MaterialID"]),
        //                MaterialName = Convert.ToString(reader["MaterialName"]),
        //                Note = Convert.ToString(reader["Note"]),
        //                Quantity = Convert.ToDouble(reader["Quantity"]),
        //                RealCalUnit = Convert.ToString(reader["RealCalUnit"]),
        //                TotalCost = Convert.ToInt64(reader["TotalCost"]),
        //                UnitCost = Convert.ToInt64(reader["UnitCost"])
        //            };
        //            finalAccount.TotalCostFormated = Global.Global.ConvertLongToMoney(finalAccount.TotalCost, Constants.SPLIP_MONEY);
        //            finalAccount.UnitCostFormated = Global.Global.ConvertLongToMoney(finalAccount.UnitCost, Constants.SPLIP_MONEY);
        //            listitem.Add(finalAccount);
        //        }
        //        return listitem;
        //    }
        //    catch (SqlException sql)
        //    {
        //        MessageBox.Show(sql.Message, "Error SQL", MessageBoxButtons.OK, MessageBoxIcon.Error);
        //        return null;
        //    }
        //    finally
        //    {
        //        if (Transaction == null) Connection.Close();
        //    }
        //}
    }
}
